#include <bits/stdc++.h>
using namespace std;

#define int int64_t
#define endl "\n"

using PII = pair<int, int>;
using TII = tuple<int, int, int>;
template<class T> using V = vector<T>;
using i64 = long long;
using i128 = __int128;
using u64 = unsigned long long;

#define FOR(i, a, b) for (int i = (int)(a); i <= (int)(b); i++)
#define FOR2(i, a, b, c) for (int i = (int)(a); i <= (int)(b); i += c)
#define FORD(i, b, a) for (int i = (int)(a); i >= (int)(b); i--)
#define FORD2(i, b, a, c) for (int i = (int)(a); i >= (int)(b); i -= c)
#define ALL(a) a.begin(), a.end()
#define RALL(a) a.rbegin(), a.rend()
#define lowbit(x) ((x) & (-x))
#define RE return;
#define Yes cout << "Yes" << endl;
#define YES cout << "YES" << endl;
#define No cout << "No" << endl;
#define NO cout << "NO" << endl;
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define sz(x) (int)(x).size()

void solve() {
    // int n;
    // string s;
    // cin >> n >> s;
    // s = ' ' + s;

    // int ans = 0;

    // FOR(i, 1, n) {
    //     ans = ans * 4 + (s[i] - '0');
    // }
    // cout << ans;

    string s = string(30, '0');

    // 10 4
    // 100 13
    // 1000 40
    // 1000 121
    FOR(i, 1, 17) {
        bool f = false;
        FORD(j, 0, 29) {
            if (s[j] == '3') {
                s[j] = '0';
                s[j - 1]++;
                f = 1;
                break;
            }
        }
        if (!f) {
            s[29]++;
        }
        FOR(j, 0, 29) {
            if (s[j] != '0') {
                FOR(k, j, 29) cout << s[k];
                cout << endl;
                break;
            }
        }
    }
}

signed main() {
    int Task = 1;

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    while (Task--) {
        solve();
    }

    return 0;
}